#include "log_in.h"

/*
用户名 log_in
参数
    name  用户
    my_pos   密码
返回值
    无
功能
    实现登陆功能
        用户通过输入 账号密码 本函数进行判断
        如果3次错误 则等待 5 s 然后重新输入
        直到输入正确 然后退出
*/
void log_in(char (*name)[128], char *my_pos)
{
    system("clear");
    char in_name[128] = " "; // 用户输入的账号
    char in_pos[128] = " ";  // 用户输入的密码

    int flag_1 = 0;
    int num = 0;        // 用于记录输入错误的次数
    /*
    flag_1 = -98  账号正确
    flag_1 = -99  账号错误
    */
    while (1)
    {

        puts("请输入你的账号");
        scanf("%s", in_name);
        for (size_t i = 0; i < 10 ; i++)
        {
            if (!strcmp(in_name, name[i]))
            {
                puts("账号正确");
                flag_1 = -98;  // 账号正确
                break;
            }
            if (i == 9)  // 这里有bug
            {
                puts("账号错误");
                flag_1 = -99;  // 账号错误
                num++;         // 记录用户输入错误的次数
            }
        }

        if (flag_1 == -98)
        {
            puts("请输入你的密码");
            scanf("%s", in_pos);
            if (!strcmp(in_pos, my_pos))
            {
                printf("登陆成功\n");
                return ;
            }
            else
            {
                puts("密码错误");
                num++;
            }
        }
        
        if (num == 3)
        {
            num = 0;                    // 错误次数请0
            Progress_Bar(0 , 0 , 10);   // 打印进度条
        }
    }
}

/*
用户名 Progress_yBar
参数
    @x              想要显示的位置 x
    @y              想要显示的位置 y
    @time_length    想要延时的时间
返回值
    无
功能
    进度条功能
*/
void Progress_Bar(int x, int y, float time_length)
{
    float flag = 0;                          // 当前进度时间
    float total_length = 20;                 // 进度条总长度
    float mean = time_length / total_length; // 平均数
    float temp = 0;                          // 和平均数对比
    float percent = 0;                       // 用于显示百分比
    int num = 0;                             // 控制进度条符号的个数

    while (1)
    {

        if (fabs(temp - mean) < EPSILON) // 使用fabs计算浮点数差值的绝对值
        {
            num++;
            temp = 0;
        }
        for (size_t i = 0; i < y; i++)
        {
            putchar('\n');
        }
        for (size_t i = 0; i < x; i++)
        {
            putchar(' ');
        }

        putchar('[');
        for (size_t i = 0; i < num; i++)
        {
            printf(">");
        }
        for (size_t i = 0; i < total_length - num; i++)
        {
            printf(" ");
        }
        putchar(']');
        percent = ((time_length / 100) * flag) * 100;
        printf("%.2f%%\n", percent);
        temp += 0.01;
        flag += 0.01;
        if (fabs((flag - 0.01) - time_length) < EPSILON)
        {
            break;
        }

        // 监控数据

        // printf("\n%.2f", flag);
        // printf("\n%.2f", time_length);
        // printf("\n%.2f", temp);
        // printf("\n%.2f", mean);
        // printf("\n%d", num);

        fflush(stdout);
        usleep(10000);
        system("clear");
    }
    system("clear");
}


  